{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 5. 什么是三因子模型？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 目录\n",
    "1. 什么是三因子模型？\n",
    "2. 如何用优矿获取基本面数据？\n",
    "3. 如何用三因子模型回归最优股票组合？\n",
    "3. 如何将三因子模型可视化？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 什么是三因子模型？\n",
    "\n",
    "这三个因子一个叫贝塔，一个叫市值，一个叫估值。更简单地说，高贝塔，小盘股和低市净率的价值股会给你带来更好的回报。\n",
    "\n",
    "### 算法\n",
    "$R_p - R_r = \\beta  (R_M - R_r) + \\beta_1  HML + \\beta_2 * SMB + \\alpha + \\epsilon$\n",
    "\n",
    "HML 对应PB，将PB分成三档。最高的为成长性（H），最低的为价值型（L），高组收益率平均减去低组收益率平均；\n",
    "\n",
    "SMB 对应LCAP，将LCAP分成三档。最小的为小公司（S），最大的为大公司（B），小公司收益率平均减去大公司收益率平均。\n",
    "\n",
    "其中，收益率为月度收益。 Rp 是单只股票的月度收益率. RM是沪深300的月度收益率."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 如何用优矿获取基本面数据？\n",
    "在优矿获取数据，并且保存为csv。\n",
    "\n",
    "具体可以参考： https://uqer.io/community/share/591a6b87df54d20056791a12\n",
    "\n",
    "### 主要难点：\n",
    "- 每个月计算一次SMB前后30%的股票组合的收益差\n",
    "- 每个月计算一次HML前后30%的股票组合的收益差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                zglt      zsyh       opt     Index       SMB       HML\n",
      "datetime                                                              \n",
      "2015-01-30 -0.089369 -0.138124 -0.125399 -0.010018 -0.490852  0.319662\n",
      "2015-02-27  0.247500  0.022605  0.081302  0.028630  0.029983  0.046953\n",
      "2015-03-31 -0.034358  0.056684  0.032922  0.129692  0.056031 -0.022294\n",
      "2015-04-30  0.737902  0.167699  0.316522  0.182605 -0.087374 -0.092583\n",
      "2015-05-29 -0.101239 -0.010733 -0.034355  0.035794 -0.029132  0.191970\n"
     ]
    }
   ],
   "source": [
    "# 读取获取后数据\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "Three_Factors = pd.read_csv('D:\\\\PycharmProjects\\\\finance_data\\\\Three_Factors.csv')\n",
    "Three_Factors.rename(columns={'Unnamed: 0': 'datetime'}, inplace=True)\n",
    "Three_Factors.index = Three_Factors.datetime\n",
    "Three_Factors.pop('datetime')\n",
    "print Three_Factors.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 如何用三因子模型回归最优股票组合？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:                    opt   R-squared:                       0.742\n",
      "Model:                            OLS   Adj. R-squared:                  0.703\n",
      "Method:                 Least Squares   F-statistic:                     19.15\n",
      "Date:                Tue, 16 May 2017   Prob (F-statistic):           4.26e-06\n",
      "Time:                        11:26:17   Log-Likelihood:                 38.678\n",
      "No. Observations:                  24   AIC:                            -69.36\n",
      "Df Residuals:                      20   BIC:                            -64.64\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:            nonrobust                                         \n",
      "==============================================================================\n",
      "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "const          0.0114      0.011      1.018      0.321      -0.012       0.035\n",
      "Index          0.8706      0.124      7.027      0.000       0.612       1.129\n",
      "SMB           -0.0172      0.069     -0.251      0.804      -0.160       0.126\n",
      "HML           -0.4084      0.121     -3.369      0.003      -0.661      -0.156\n",
      "==============================================================================\n",
      "Omnibus:                        0.491   Durbin-Watson:                   2.219\n",
      "Prob(Omnibus):                  0.782   Jarque-Bera (JB):                0.339\n",
      "Skew:                           0.271   Prob(JB):                        0.844\n",
      "Kurtosis:                       2.786   Cond. No.                         12.1\n",
      "==============================================================================\n",
      "\n",
      "Warnings:\n",
      "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n"
     ]
    }
   ],
   "source": [
    "import statsmodels.api as sm\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "X = Three_Factors.iloc[:, 3:]\n",
    "Y = Three_Factors.iloc[:, 2]\n",
    "X = sm.add_constant(X)\n",
    "model = sm.OLS(Y, X)\n",
    "result = model.fit()\n",
    "print result.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.87059051 -0.01723169 -0.40840239]\n"
     ]
    }
   ],
   "source": [
    "factors = pd.concat([Three_Factors.Index, Three_Factors.SMB, Three_Factors.HML],axis = 1).dropna()\n",
    "factors.columns = ['MARKET','SMB','HML']\n",
    "f_params = np.array(result.params[1:])\n",
    "print f_params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.00800866  0.00012928  0.00080461]\n",
      " [ 0.00012928  0.02913037 -0.00546511]\n",
      " [ 0.00080461 -0.00546511  0.00938857]]\n",
      "0.00699161966912\n",
      "0.00233201035387\n"
     ]
    }
   ],
   "source": [
    "#因子协方差\n",
    "cov_factors = np.cov(factors.T)\n",
    "print cov_factors\n",
    "\n",
    "## 得出因子方差与剩余风险的方差\n",
    "print np.dot(np.dot(f_params.T, cov_factors),f_params)\n",
    "\n",
    "print np.std(result.resid)**2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 如何将三因子模型可视化？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x59cfaf28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "factors_model = result.params[0]+result.params[1]*Three_Factors.Index + result.params[2]*Three_Factors.SMB\n",
    "+ result.params[3]*Three_Factors.HML\n",
    "\n",
    "factors_model.index = pd.to_datetime(factors_model.index, format='%Y-%m-%d')\n",
    "\n",
    "plt.plot(factors_model, label='Three_Factor_Model')\n",
    "plt.plot(Three_Factors.opt, label='OPT')\n",
    "plt.legend(loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 作业\n",
    "学习如何从优矿获取基本面数据，并保存为csv，作为基本面数据研究。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
